package com.yuandian.management.mapper;


import com.yuandian.api.management.entity.ConfArea;
import com.yuandian.management.vo.DataCenterArea;
import com.yuandian.management.vo.DataCenterInfo;
import com.yuandian.management.vo.DataCenterParams;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 数据中心配置 Mapper 接口
 * </p>
 *
 * @author zhoutian
 * @since 2021-1-5 16:27:21
 */
@Mapper
public interface DataCenterMapper {


    /**
     * 新增数据中心
     *
     * @param info 参数
     * @return int
     */
    int insertDataCenter(DataCenterInfo info);

    /**
     * 新增数据中心区域
     *
     * @param info 参数
     * @return int
     */
    int insertDataCenterArea(@Param("info") List<DataCenterArea> info);

    /**
     * 根据条件分页查询数据中心列表
     *
     * @param params 参数
     * @return 参数配置集合
     */
    List<DataCenterInfo> selectDataCenterList(@Param("params") DataCenterParams params);


    /**
     * 查询数据中心信息
     *
     * @param id 参数ID
     * @return SysMidConfig
     */
    DataCenterInfo selectDataCenter(@Param("id") Integer id);


    /**
     * 校验名称称是否唯一
     *
     * @param name 名称
     * @return Integer
     */
    Integer checkDataUnique(String name);


    /**
     * 修改数据中心信息
     *
     * @param params 参数
     * @return int
     */
    int updateDataCenter(DataCenterInfo params);

    /**
     * 修改数据中心区域信息
     *
     * @param params 参数
     * @return int
     */
    int updateDataCenterArea(DataCenterInfo params);

    /**
     * 批量删除数据中心信息
     *
     * @param ids id集
     * @return int
     */
    int deleteDataCenterByIds(Integer[] ids);

    /**
     * 根据数据中心ID批量删除数据中心区域
     *
     * @param idS id集
     * @return int
     */
    int deleteDataCenterAreaByCenterId(Integer[] idS);


    /**
     * 根据条件分页查询数据中心区域信息
     *
     * @param params 参数
     * @return 参数配置集合
     */
    List<DataCenterInfo> selectDataCenterAreaList(@Param("params") DataCenterParams params);

    /**
     * 根据数据中心ID查询已分配的区域id
     *
     * @param params 参数
     * @return List<Integer>
     */
    List<String> selectAreaIdList(@Param("params") DataCenterParams params);

    /**
     * 根据id查询数据中心区域信息
     *
     * @param id 参数
     * @return 参数配置集合
     */
    DataCenterInfo selectDataCenterArea(@Param("id") Integer id);

    /**
     * 批量删除数据中心区域信息
     *
     * @param ids id集
     * @return 结果
     */
    int deleteDataCenterAreaByIds(Integer[] ids);

    /**
     * 根据区域ID和数据中心id批量删除数据中心区域
     *
     * @param areaIds  区域ID集
     * @param centerId 数据中心ID
     * @return int
     */
    int deleteAreaByCenterIdAndAreaIds(@Param("areaIds") Integer[] areaIds, @Param("centerId") Integer centerId);


    /**
     * 根据条件查询区域列表
     *
     * @param params 参数
     * @return 参数配置集合
     */
    List<Map<String, Object>> selectAreaList(@Param("params") DataCenterParams params);

    /**
     * 校验数据中心区域是否唯一
     *
     * @param areaId   区域ID
     * @param centerId 数据中心id
     * @return Integer
     */
    Integer checkAreaUnique(@Param("areaId") Integer areaId, @Param("centerId") Integer centerId);


    /**
     * 查询区域信息
     *
     * @param id 参数ID
     * @return SysMidConfig
     */
    List<ConfArea> selectAreaById(@Param("id") List<String> id);

    /**
     * 根据ID集查询对应信息
     *
     * @param dataCenterIds 参数ID集
     * @return SysMidConfig
     */
    List<DataCenterInfo> selectByIds(@Param("list") Collection<Integer> dataCenterIds);

}
